/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import static GUI.ListAlbumArtistForm.selectedRow1;
import static GUI.ListAlbumGroupForm.selectedRow;
import POJOS.Album;
import POJOS.Artist;
import POJOS.MusicProductionCompany;
import POJOS.Song;
import com.sun.glass.events.KeyEvent;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;

/**
 *
 * @author jim
 */
public class NewOrModifyAlbumArtistForm extends javax.swing.JFrame {
    Album album;
    Song song;
    boolean modify;
    int confirm;
    int selectRow;
    MusicProductionCompany mpc;
    Artist art;

    /**
     * Creates new form NewOrModifyAlbumArtistFiorm
     */
    public NewOrModifyAlbumArtistForm() {
        initComponents();
        setLocationRelativeTo(null);
        modify = false;
        jComboBoxEtairia.setSelectedItem(null);
        jComboBoxArtist.setSelectedItem(null);
        songList.clear();
    }

    //Τροποποίηση άλμπουμ
    public NewOrModifyAlbumArtistForm(Album al) {
        initComponents();
        checkButtons();
        modify= true;
        songTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        
        album = al;
        //Ενημερώνει τους τίτλους του GUI
        setTitle("ΤΡΟΠΟΠΟΙΗΣΗ ΑΛΜΠΟΥΜ");
        jLabel1.setText("Παρακαλώ τροποποιείστε τα στοιχεία του άλμπουμ:");
        cancel.setText("ΑΚΥΡΩΣΗ");
        
        //Δίνει τιμές στα JText από την επιλεγμένη γραμμή του άλμπουμ
        titleJT.setText(album.getTitle());
        typeJT.setText(album.getTypeAlbum());
        tralbumJT.setText(String.valueOf(album.getDiskNumber()));
        jComboBoxEtairia.setSelectedItem(album.getIdMusicProductionCompany().getNameMpc());
        jComboBoxArtist.setSelectedItem(album.getIdArtist().getArtisticName());
        dateJT.setDate(album.getReleaseDate());
         
        //Καθαρίζει τη songList
        songList.clear();
        
        //Ενημερώνει τη λίστα τραγουδιών με βάση το επιλεγμένο άλμπουμ
        RadioStationPUEntityManager.getTransaction().begin();
        album = RadioStationPUEntityManager.merge(album);
        RadioStationPUEntityManager.getTransaction().commit();
         
        for (Song s : album.getSongCollection()){
            NewOrModifyAlbumArtistForm.songList.add(s);
        }
    }
  
     private void checkButtons(){
        selectRow= songTable.getSelectedRow();
        remove.setEnabled(selectRow>=0);
     }
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        RadioStationPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("RadioStationPU").createEntityManager();
        musicProductionCompanyQuery = java.beans.Beans.isDesignTime() ? null : RadioStationPUEntityManager.createQuery("SELECT m.nameMpc FROM MusicProductionCompany m");
        musicProductionCompanyList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(musicProductionCompanyQuery.getResultList());
        artistQuery = java.beans.Beans.isDesignTime() ? null : RadioStationPUEntityManager.createQuery("SELECT a.artisticName FROM Artist a");
        artistList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(artistQuery.getResultList());
        songQuery = java.beans.Beans.isDesignTime() ? null : RadioStationPUEntityManager.createQuery("SELECT s FROM Song s");
        songList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(songQuery.getResultList());
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        titleJT = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        typeJT = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        tralbumJT = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jComboBoxEtairia = new javax.swing.JComboBox();
        jLabel6 = new javax.swing.JLabel();
        jComboBoxArtist = new javax.swing.JComboBox();
        jLabel7 = new javax.swing.JLabel();
        dateJT = new org.jdesktop.swingx.JXDatePicker();
        jLabel8 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        songTable = new javax.swing.JTable();
        jSeparator1 = new javax.swing.JSeparator();
        add = new javax.swing.JButton();
        remove = new javax.swing.JButton();
        save = new javax.swing.JButton();
        cancel = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("ΕΙΣΑΓΩΓΗ ΑΛΜΠΟΥΜ");
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(204, 0, 204));
        jLabel1.setText("Εισάγετε τα στοιχεία του νέου Άλμπουμ Καλλιτένη:");

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel2.setText("Τίτλος:");

        titleJT.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N

        jLabel3.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel3.setText("Τύπος Άλμουμ:");

        typeJT.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N

        jLabel4.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel4.setText("Αριθμός Δίσκου:");

        tralbumJT.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        tralbumJT.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                tralbumJTKeyTyped(evt);
            }
        });

        jLabel5.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel5.setText("Εταιρία Παραγωγής:");

        jComboBoxEtairia.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N

        org.jdesktop.swingbinding.JComboBoxBinding jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, musicProductionCompanyList, jComboBoxEtairia);
        bindingGroup.addBinding(jComboBoxBinding);

        jLabel6.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel6.setText("Καλλιτέχνης:");

        jComboBoxArtist.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N

        jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, artistList, jComboBoxArtist);
        bindingGroup.addBinding(jComboBoxBinding);

        jLabel7.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel7.setText("Ημερομηνία Κυκλοφορίας:");

        jLabel8.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel8.setText("Πίνακας Τραγουδιών");

        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, songList, songTable);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${title}"));
        columnBinding.setColumnName("ΤΙΤΛΟΣ");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${duration}"));
        columnBinding.setColumnName("ΔΙΑΡΚΕΙΑ");
        columnBinding.setColumnClass(Float.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${tracknr}"));
        columnBinding.setColumnName("ΑΡΙΘΜΟΣ ΤΡΑΓΟΥΔΙΟΥ");
        columnBinding.setColumnClass(Integer.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${diskNumber}"));
        columnBinding.setColumnName("ΑΡΙΘΜΟΣ ΔΙΣΚΟΥ");
        columnBinding.setColumnClass(Integer.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();
        songTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                songTableMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(songTable);

        add.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        add.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/1424870976_add.png"))); // NOI18N
        add.setText("ΕΙΣΑΓΩΓΗ");
        add.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addActionPerformed(evt);
            }
        });

        remove.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        remove.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/Button-delete-icon.png"))); // NOI18N
        remove.setText("ΔΙΑΓΡΑΦΗ");
        remove.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeActionPerformed(evt);
            }
        });

        save.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        save.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/Save-icon.png"))); // NOI18N
        save.setText("ΑΠΟΘΗΚΕΣΗ");
        save.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveActionPerformed(evt);
            }
        });

        cancel.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        cancel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/Actions-button-cancel-icon.png"))); // NOI18N
        cancel.setText("ΕΞΟΔΟΣ");
        cancel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(44, 44, 44)
                        .addComponent(jLabel1))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addContainerGap()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(jLabel7)
                                    .addComponent(jLabel6)
                                    .addComponent(jLabel5)))
                            .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.TRAILING))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(titleJT, javax.swing.GroupLayout.PREFERRED_SIZE, 168, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(tralbumJT, javax.swing.GroupLayout.PREFERRED_SIZE, 168, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(typeJT, javax.swing.GroupLayout.PREFERRED_SIZE, 168, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addComponent(jComboBoxEtairia, javax.swing.GroupLayout.Alignment.LEADING, 0, 110, Short.MAX_VALUE)
                                .addComponent(jComboBoxArtist, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addComponent(jLabel8)
                            .addComponent(dateJT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(19, 19, 19)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 443, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(save)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                .addComponent(cancel)
                                .addGap(24, 24, 24))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(62, 62, 62)
                        .addComponent(add)
                        .addGap(68, 68, 68)
                        .addComponent(remove)))
                .addContainerGap(20, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(titleJT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(typeJT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(tralbumJT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jComboBoxEtairia, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(9, 9, 9)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel6)
                    .addComponent(jComboBoxArtist, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(10, 10, 10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel7)
                    .addComponent(dateJT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(34, 34, 34)
                .addComponent(jLabel8)
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(29, 29, 29)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(add)
                    .addComponent(remove, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addGap(18, 18, 18)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(save)
                    .addComponent(cancel))
                .addGap(21, 21, 21))
        );

        bindingGroup.bind();

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked
        // TODO add your handling code here:
        selectRow=-1;
        remove.setEnabled(selectRow>=0);
    }//GEN-LAST:event_formMouseClicked

    private void songTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_songTableMouseClicked
        // TODO add your handling code here:
        checkButtons();
    }//GEN-LAST:event_songTableMouseClicked

    private void addActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addActionPerformed
        // TODO add your handling code here:
        boolean con=true;
        
        //Εάν βρισκόμαστε στη τροποποίηση άλμπουμ 
        if (modify==true){
            
            //Ζητάει τα στοιχεία του νέου τραγουδιού
            String newtitle= JOptionPane.showInputDialog("Εισήγαγε τον τίλτο του τραγουδιού:");
            float newduration = Float.parseFloat(JOptionPane.showInputDialog("Εισήγαγε τη διάρκεια σε δευτερόλεπτα:"));
            int newtrack = Integer.parseInt(JOptionPane.showInputDialog("Εισήγαγε τον αριθμό σειράς του τραγουδιιού:"));
            //Παίρνει τον αριθμό του δίσκου από το αντίστοιχο JText
            int newdisknumber = Integer.parseInt(tralbumJT.getText());
        
            album = ListAlbumArtistForm.albumList.get(ListAlbumArtistForm.albumArtistTable.convertRowIndexToModel(selectedRow1));

            //Δημιουργεί το νέο τραγούδι
            song= new Song(0,newtitle,newduration,newtrack,newdisknumber,album);
                
            confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να εισάγετε το τραγούδι στο άλμπουμ " + song.getTitle() + ";","",JOptionPane.OK_CANCEL_OPTION);
            if (confirm == 0){
            
                //Έλεγχος αν υπάρχει τραγούδι με το ίδιο όνομα στη λίστα
                for(int i=0;i<this.songList.size();i++){    
                    if (songList.get(i).getTitle().equals(newtitle)){
                        con = false;
                    }
                }
                //Εάν δεν υπάρχει προσθέτει το τραγούδι στη λίστα
                if (con) {
                    NewOrModifyAlbumArtistForm.songList.add(songList.size(), song);
                    JOptionPane.showMessageDialog(null,"Το τραγούδι προστέθηκε στη λίστα!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                    
                }else{
                    JOptionPane.showMessageDialog(null, "Το τραγούδι υπάρχει ήδη στη λίστα!", "ERROR", JOptionPane.ERROR_MESSAGE);
                }
            }
            //Εάν βρισκόμαστε στη δημιουργία νέου άλμπουμ
        }else{
           
            //Πριν την εισαγωγή των τραγουδιών μας ζητάει να εισαγουμε τον αριθμό του άλμπουμ
            if(tralbumJT.getText().isEmpty()){
                JOptionPane.showMessageDialog(null, "Εισάγετε πρώτα τον αριθμό του Δίσκου!", "ERROR", JOptionPane.ERROR_MESSAGE);
            }else{
                
                String newtitle= JOptionPane.showInputDialog("Εισήγαγε τον τίλτο του τραγουδιού:");
                float newduration = Float.parseFloat(JOptionPane.showInputDialog("Εισήγαγε τη διάρκεια σε δευτερόλεπτα:"));
                int newtrack = Integer.parseInt(JOptionPane.showInputDialog("Εισήγαγε τον αριθμό σειράς του τραγουδιιού:"));
                int newdisknumber = Integer.parseInt(tralbumJT.getText());
          
                //Δημιουργία τραγουδιού χωρίς σύνδεση με το άλμπουμ
                song= new Song(0,newtitle,newduration,newtrack,newdisknumber);
        
                confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να εισάγετε το τραγούδι " + song.getTitle() + ";","",JOptionPane.OK_CANCEL_OPTION);
                
                if (confirm == 0){
            
                //Έλεγχος αν υπάρχει τραγούδι με το ίδιο όνομα στη λίστα
                    for(int i=0;i<this.songList.size();i++){    
                        if (songList.get(i).getTitle().equals(newtitle)){
                        con = false;
                        }
                    }
                    if (con){
                    //Έαν δεν υπάρχει προσθέτει το τραγούδι στη λίστα
                        NewOrModifyAlbumArtistForm.songList.add(songList.size(), song);
                        JOptionPane.showMessageDialog(null,"Το τραγούδι προστέθηκε στη λιστά!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                    
                    }else{
                    JOptionPane.showMessageDialog(null, "Το τραγούδι υπάρχει ήδη στη λίστα!", "ERROR", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        }
    }//GEN-LAST:event_addActionPerformed

    private void removeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeActionPerformed
        // TODO add your handling code here:
       //Στην πέριπτωση της τροποποίησης του άλμπουμ
        if (modify==true){
            selectRow= songTable.getSelectedRow();
            song= songList.get(songTable.convertRowIndexToModel(selectRow));
            
            confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να διαγράψετε το τραγούδι " + song.getTitle() + ";","",JOptionPane.OK_CANCEL_OPTION);  
            if (confirm==0){
                //Αφαιρεί το τραγούδι από τη λίστα
                songList.remove(song);
            
                JOptionPane.showMessageDialog(null,"Το τραγούδι διαγράφτηκε από τη λίστα!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
            }
            checkButtons();
            //Στην περίπτωση της προσθήκης νέου άλμπουμ
        }else{
            selectRow= songTable.getSelectedRow();
            song= songList.get(songTable.convertRowIndexToModel(selectRow));
            confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να αφαιρέσετε το τραγούδι από τη λίστα "+  ";","",JOptionPane.OK_CANCEL_OPTION);
            if (confirm==0){
                
                songList.remove(song);
                JOptionPane.showMessageDialog(null,"Το τραγούδι αφαιρέθηκε από τη λίστα!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
            }       
            checkButtons();
            //Εάν η λίστα τραγουδιών είναι άδεια μπορούμε να αλλάξουμε τον αριθμό του δίσκου
            if(songList.isEmpty()){
                tralbumJT.setEditable(true);
            }
        }
    }//GEN-LAST:event_removeActionPerformed

    private void saveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveActionPerformed
        // TODO add your handling code here:
        //Για την αποθήκευση πρέπει να είναι όλα τα πεδία συμπληρωμένα
        if (titleJT.getText().isEmpty() || typeJT.getText().isEmpty() ||
            jComboBoxArtist.getSelectedItem().toString().isEmpty() ||
            dateJT.getDate().toString().isEmpty() || jComboBoxEtairia.getSelectedItem().toString().isEmpty()){
            JOptionPane.showMessageDialog(null, "Σμπληρώστε τα στοιχεία του άλμπουμ!", "ERROR", JOptionPane.ERROR_MESSAGE);
        } else{
            //Για την τροποποίηση του άλμπουμ
            if (modify == true){
                confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να αποθηκεύσετε τις αλλαγές;","",JOptionPane.OK_CANCEL_OPTION);
                if (confirm == 0){
                    //Έλεγχος για ύπαρξη στη λίστα τουλάχιστον ενός τραγουδιού
                    if(songList.size()<1){                          
                        JOptionPane.showMessageDialog(null, "Το άλμπομ πρέπει να περιέχει τουλάχιστον ένα τραγούδι!", "ERROR", JOptionPane.ERROR_MESSAGE);
                    }else{
                        //Αν υπάρχει τουλάχιστον ένα τραγούδι παίρνει τις τιμές από τα JText και τις περνάει στο άλμουμ
                        album.setTitle(titleJT.getText());
                        album.setTypeAlbum(typeJT.getText());
                        album.setDiskNumber(Integer.parseInt(tralbumJT.getText()));
                        album.setReleaseDate(dateJT.getDate());
                        
                        //Επιστροφή του Id_MusicCompany από το NameMusicCompany
                        mpc  = DB.DBmanager.identifyMusicCompanywithNameMusicCompany(jComboBoxEtairia.getSelectedItem().toString());
                        album.setIdMusicProductionCompany(mpc);
                   
                        //Επιστροφή του Id_artist από το ArtisticName
                        art = DB.DBmanager.identifyArtistwithArtisticName(jComboBoxArtist.getSelectedItem().toString());
                        album.setIdArtist(art);
                    
                    
                        boolean deleteSong=false;
                        boolean addSong = false;   
                        //Αποθήκευση των αλλαγών των στοιχείων του άλμπουμ στη ΒΔ
                        if (DB.DBmanager.ModifyAlbum(album)){
                    
                            //Διαγραφή τραγουδιών από τη ΒΔ
                            if(DB.DBmanager.deleteFromSongCollection(album, songList)){
                                deleteSong=true;
                            }
                            //Προσθήκη τραγουδιών στη βάση
                            for(Song s: songList){
                               if(DB.DBmanager.addToSongCollection(album,s)){
                                    addSong=true;                            
                                }
                            }                    
                            
                            //Έλεγχος για τη διαγραφή/προσθήκη των τραγουδιών στη ΒΔ
                            if(addSong & deleteSong){   
                                JOptionPane.showMessageDialog(null,"Επιτυχής τροποποίηση τραγουδιών του άλμπουμ!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                            }
                            
                            ListAlbumArtistForm.albumList.set(ListAlbumArtistForm.albumArtistTable.getSelectedRow(),album);
                            JOptionPane.showMessageDialog(null,"Επιτυχής τροποποίηση στοιχείων άλμπουμ!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                        
                            dispose();
                           
                            }else{
                                JOptionPane.showMessageDialog(null, "Αποτυχία τροποποίησης άλμπουμ!", "ERROR", JOptionPane.ERROR_MESSAGE);
                            }
                        }
                    }
                    //Στην περίπτωση προσθήκης νέου άλμπουμ
                }else{
                    confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να ολοκληρώσετε την καταχώρηση;","",JOptionPane.OK_CANCEL_OPTION);
               
                    if (confirm == 0){
                        //Έλεγχος για ύπαρξη στη λίστα τουλάχιστον ενός τραγουδιού
                        if(songList.size()<1){
                            JOptionPane.showMessageDialog(null, "Το άλμπομ πρέπει να περιέχει τουλάχιστον ένα τραγούδι!", "ERROR", JOptionPane.ERROR_MESSAGE);

                        } else{
                            //Παίρνει τις τιμές από τα JText και τις περνάει στο άλμπουμ
                            String newTitle= titleJT.getText();
                            String newType = typeJT.getText();
                            Integer newtralbum= Integer.parseInt(tralbumJT.getText());
                            mpc  = DB.DBmanager.identifyMusicCompanywithNameMusicCompany(jComboBoxEtairia.getSelectedItem().toString());
                            art = DB.DBmanager.identifyArtistwithArtisticName(jComboBoxArtist.getSelectedItem().toString());
                            Date newDate = dateJT.getDate();
                                
                            //Δημιουργία νέου άλμπουμ
                            album=  new Album(0, newTitle, newDate, newType, newtralbum, art, null, mpc);
               
                    
                    
                            //Αποθήκευση στοιχείων του άλμουμ στη ΒΔ
                            if (DB.DBmanager.SaveAlbum(album)){
                                //Πέρασμα του άλμπουμ στον καλλιτέχνη
                                if(DB.DBmanager.SaveArtistAlbum(album, art)){
                                //Αποθήκευση των τραγουδιών της λίστας στη ΒΔ
                                    for(Song s: songList){
                                 //Δημιουργία τραγουδιών με βάση το άλμπουμ
                                    song =new Song (0,s.getTitle(),s.getDuration(),s.getTracknr(), s.getDiskNumber(),album);
                                        if(DB.DBmanager.SaveSong(album,song)){
                                    }
                                }
                            JOptionPane.showMessageDialog(null,"Επιτυχής καταχώρηση τραγουδιών!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                            ListAlbumArtistForm.albumList.add(album);
                            JOptionPane.showMessageDialog(null,"Επιτυχής καταχώρηση άλμπουμ!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                        
                            //Null τιμές στο GUI για αποθήκευση νέου άλμπουμ
                            titleJT.setText("");
                            typeJT.setText("");
                            tralbumJT.setText("");
                            jComboBoxEtairia.setSelectedItem(null);
                            jComboBoxArtist.setSelectedItem(null);
                            dateJT.setDate(null);
                            songList.clear();
                                }   
                            }else{
                                JOptionPane.showMessageDialog(null, "Σφάλμα επικοινωνίας με τη ΒΔ!", "ERROR", JOptionPane.ERROR_MESSAGE);
                            }
                        }
                    }
                }   
            
        }                                            
    }//GEN-LAST:event_saveActionPerformed

    private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed
        // TODO add your handling code here:
        //JOptionPane.showMessageDialog(null,"Η λίστα τραουδιών !","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
        dispose();
    }//GEN-LAST:event_cancelActionPerformed

    private void tralbumJTKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tralbumJTKeyTyped
        // TODO add your handling code here:
         char c= evt.getKeyChar();
        if(!(Character.isDigit(c) || (c==KeyEvent.VK_BACKSPACE) || (c==KeyEvent.VK_DELETE))){
            getToolkit().beep();
            evt.consume();
        }
    }//GEN-LAST:event_tralbumJTKeyTyped

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewOrModifyAlbumArtistForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewOrModifyAlbumArtistForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewOrModifyAlbumArtistForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewOrModifyAlbumArtistForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewOrModifyAlbumArtistForm().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.persistence.EntityManager RadioStationPUEntityManager;
    private javax.swing.JButton add;
    private java.util.List<POJOS.Artist> artistList;
    private javax.persistence.Query artistQuery;
    private javax.swing.JButton cancel;
    private org.jdesktop.swingx.JXDatePicker dateJT;
    private javax.swing.JComboBox jComboBoxArtist;
    private javax.swing.JComboBox jComboBoxEtairia;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private java.util.List<POJOS.MusicProductionCompany> musicProductionCompanyList;
    private javax.persistence.Query musicProductionCompanyQuery;
    private javax.swing.JButton remove;
    private javax.swing.JButton save;
    public static java.util.List<POJOS.Song> songList;
    private javax.persistence.Query songQuery;
    private javax.swing.JTable songTable;
    private javax.swing.JTextField titleJT;
    private javax.swing.JTextField tralbumJT;
    private javax.swing.JTextField typeJT;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration//GEN-END:variables
}
